<?php
declare (strict_types = 1);

namespace app\validate;

use think\Validate;


// php think make:validate User
class User extends Validate
{


    /**
     * 验证的内置规则有很多，并且严格区分大小写
     * 静态方法支持两种形式 比如 ::number()  isNbumber()
     * require是PHP的保留字 ，所以必须用isRequire()  must()
     * 其他具体看手册 好吧
     */
    /**
     * 定义验证规则
     * 格式：'字段名'	=>	['规则1','规则2'...]
     *
     * @var array
     */	
	protected $rule = [
	    'name|用户名'=> 'require|max:20|checkName:郭浩佳',   //不得为空，不得大于20位
        'price'=>'number|between:1,100',  //必须是数值，1-100之间
        'email'=>'email', //邮箱格式
        'id'=>'number|between:1,10'
    ];


	//自定义规则
    protected function checkName($value,$rule,$data,$feild,$title){
//        dump($value);
//        dump($rule);
//        dump($data);
//        dump($feild);
//        dump($title);
        return ($value==$rule)?'非法称谓，不得注册！':true;
    }
    /**
     * 定义错误信息
     * 格式：'字段名.规则名'	=>	'错误信息'
     *
     * @var array
     */	
    protected $message = [
        'name.require'=>'姓名不得为空',
        'name.max'=>'姓名不得大于20位',
        'price.number'=>'价格必须是数字',
        'price.between'=>'价格必须在1-100之间',
        'email'=>'邮箱格式错误',
        'id.number'=>'id必须是数字',
        'id.between'=>'id必须在1~100之间'
    ];

    //设置场景验证
    protected $scene = [
      'insert'=>['name','price','email'],
      'edit'=>['name','price'],
      'route'=>['id']
    ];

    //在验证类端，可以设置一个公共方法对场景的细节进行定义
    public function sceneSave(){
        $save = $this->only(['name','price'])   //仅对两个字段进行验证
            ->remove('name','max')                //移出掉最大字段的限制
            //如果是移除多个
            //remove('name','max|require')
            ->append('price','require');        //增加一个不能为空的限制
        return $save;
    }

}
